Android地图SDK

概述

Android地图SDK (v4.1.1)

Android地图SDK是一套基于Android 2.3及以上版本设备的应用程序接口。 您可以使用该套 SDK开发适用于Android系统移动设备的地图应用,通过调用地图SDK接口,您可以轻松访问百度地图服务和数据,构建功能丰富、交互性强的地图类应用程序。

自v4.0起,适配Android Wear,支持Android穿戴设备,新增室内图相关功能。

百度地图Android SDK提供的所有服务是免费的,接口使用无次数限制。您需申请密钥(key)后, 才可使用百度地图Android SDK。

功能介绍

1. 地图

提供地图展示地图操作功能。

  • 地图展示包括:普通地图(2D,3D)、卫星图和实时交通图;
  • 地图操作:可通过接口或手势控制来实现地图的点击、双击、长按、缩放、旋转、改变视角等操作;
  • 地图展示:开放高清4K地图显示。

2. POI检索

支持周边检索区域检索城市内检索Place详情信息检索

  • 周边检索:以某一点为中心,指定距离为半径,根据用户输入的关键词进行POI检索;
  • 区域检索:在指定矩形区域内、根据关键词进行POI检索;
  • 城市内检索:在某一城市内,根据用户输入的关键字进行POI检索;
  • POI详情检索:根据POI的ID信息,检索该兴趣点的详情。

3. 地理编码

提供地理坐标实际地址之间相互转换的能力。

  • 正向地理编码:实现了将中文地址或地名描述转换为地球表面上相应位置的功能;
  • 反向地理编码:将地球表面的地址坐标转换为标准地址的过程。

4. 线路规划

支持公交信息查询公交换乘查询公交/驾车/骑行/步行线路规划

  • 公交信息查询:可对公交详细信息进行查询;
  • 公交换乘查询:根据起、终点,查询策略,进行线路规划方案;
  • 驾车线路规划:提供不同策略,规划驾车路线;(支持设置途经点)
  • 步行路径检索:支持步行路径的规划;
  • 骑行路径检索:支持跨城骑行路径规划。

5. 地图覆盖物

百度地图SDK支持多种地图覆盖物,帮助您展示更丰富的地图。目前所支持的地图覆盖物有:定位图层地图标注(Marker)几何图形(点、折线、弧线、多边形等)地形图图层POI检索结果覆盖物线路规划结果覆盖物热力图图层瓦片图层等。

6. 定位

采用GPSWIFI基站IP混合定位模式,请使用Android定位SDK获取定位信息,使用地图SDK定位图层进行位置展示

7. 离线地图

用户可以通过SDK在线下载离线包接口,下载离线地图包,使用离线地图可节省用户流量,提供更好的地图展示效果。

8. 调启百度地图

利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能。 目前支持调启的功能有:POI周边检索、POI详情页面、步行线路规划、驾车线路规划、公交线路规划、驾车导航、步行导航、骑行导航。 (具体请参考开发指南中,计算工具章节内的介绍)

9. 周边雷达

周边雷达功能,是面向移动端开发者的一套SDK功能接口。同步支持Android和iOS端。它的本质是一个连接百度LBS开放平台前端SDK产品和后端LBS云的中间服务。开发者利用周边雷达功能,可以便捷的在自己的应用内,帮助用户实现查找周边跟“我”使同样一款App的人,这样一个功能。

10. LBS云

百度地图LBS云是百度地图针对LBS开发者全新推出的平台级服务,不仅适用PC应用开发,同时适用移动设备应用的开发。

使用LBS云,可以实现移动开发者存储海量位置数据的服务器零成本及维护压力,且支持高效检索用户数据,且实现地图展现。

11. 特色功能

包括:短串分享Place详情信息检索热力图等。

  • 短串分享:将POI搜索结果、驾车/公交/骑行/步行路线规划结果 或反地理编码结果生成短串,当其他用户点击短串即可打开手机上的百度地图客户端或者手机浏览器进行查看;
  • Place详情检索:根据POI的ID信息,检索该POI的详情;
  • 热力图功能:开放热力图绘制能力,帮助开发者构建属于自己的热力图;

12. 个性化地图

自v3.7.0起,支持使用个性化地图模板,改变底图颜色和样式。

  • 使用个性化模板,实现地图元素的颜色设置,地图元素包含大地、水系、草地、高速、普通道路、铁路、地铁,poi等,以及poi和道路的文字颜色设置。
  • 通过可见属性,控制显示地图元素。

下个版本,我们将进一步优化此功能,让广大开发者可以通过可视化编辑器方式编辑样式模板。

13. 室内图

自v4.0起,百度地图SDK室内图功能正式上线,辅助开发者实现全新的地理位置服务体验,室内地图与百度地图App同步更新。

  • 支持的公众建筑包含购物商场、机场和火车站等交通枢纽,医院等,覆盖全国约600个大型购物中心,覆盖类型和城市还在持续增加中。

14. Android Wear

自v4.0起,适配Android Wear,支持Android穿戴设备。

  • 适配穿戴设备显示屏,支持地图显示、POI检索、路线规划等全部功能

获取密钥

需要创建一个应用,便可以获得该应用的访问应用(AK)密钥。

开发指南

简介

什么是百度地图Android SDK?

百度地图 Android SDK是一套基于Android 2.1及以上版本设备的应用程序接口, 您可以通过该接口实现丰富的LBS功能:

  • 地图:提供地图(2D、3D)的展示和缩放、平移、旋转、改变视角等地图操作;
  • 室内图:提供展示公众建筑物室内地图的展示功能;
  • Android Wear:适配Android Wear,支持Android穿戴设备;
  • POI检索:可根据关键字,对POI数据进行周边、区域和城市内三种检索;
  • 室内POI检索:支持设置城市和当前建筑物的室内POI检索;
  • 地理编码:提供地理坐标和地址之间相互转换的能力;
  • 线路规划:支持公交信息查询、公交换乘查询、驾车线路规划和步行路径检索;
  • 覆盖物:提供多种地图覆盖物(自定义标注、几何图形、文字绘制、地形图图层、热力图图层等),满足开发者的各种需求;
  • 定位:采用多种定位模式,使用定位SDK获取位置信息,使用地图SDK我的位置图层进行位置展示;
  • 离线地图:支持使用离线地图,节省用户流量,同时为用户带来更好的地图体验;
  • 调启百度地图:利用SDK接口,直接在本地打开百度地图客户端或WebApp,实现地图功能;
  • 周边雷达:利用周边雷达功能,开发者可在App内低成本、快速实现查找周边使用相同App的用户位置的功能;
  • LBS云检索:支持用户检索存储在LBS云内的自有POI数据,并展示;
  • 瓦片图层:支持开发者在地图上添加自有瓦片数据;
  • 特色功能:提供短串分享、Place详情检索、热力图等特色功能,帮助开发者搭建功能更加强大的应用;

面向的读者

百度地图SDK是提供给具有一定Android编程经验和了解面向对象概念的读者使用。此外,读者还应该对地图的基本知识有一定的了解。在使用中遇到任何问题,都可以通过API论坛

获取定制的百度地图SDK

开发者可在百度地图Android SDK的下载页面下载到最新版的地图SDK,下载地址为:http://developer.baidu.com/map/index.php?title=androidsdk/sdkandev-download.

为了给开发者带来更优质的地图服务、满足开发者灵活使用SDK的需求,百度地图SDK自v2.3.0起,采用了可定制的形式为用户提供开发包。 百度地图SDK按功能可分为:基础地图、检索功能、LBS云检索、计算工具和周边雷达五个部分,开发者可根据自身的实际需求,任意组合这五种功能,点击下载页面的“自定义下载”, 即可下载相应的开发包来完成自己的应用开发。

  • 基础地图:包括基本矢量地图、卫星图、实时路况图、室内图、适配Android Wear,各种地图覆盖物,瓦片图层,OpenGL绘制能力。此外还包括各种与地图相关的操作和事件监听;
  • 检索功能:包括POI检索(周边、区域、城市内),室内POI检索,Place详情检索,公交信息查询,路线规划(驾车、步行、公交),地理编码/反地理编码,在线建议查询,短串分享等;
  • LBS云检索:包括LBS云检索(周边、区域、城市内、详情);
  • 计算工具:包括计算两点之间距离、计算矩形面积、坐标转换、调启百度地图客户端、判断点和圆/多边形位置关系、本地收藏夹等功能;
  • 周边雷达:包含位置信息上传和检索周边相同应用的用户位置信息功能;

注:本套开发指南是针对默认的全功能包编写,开发者在使用定制化的SDK进行开发时,请参考开发指南中相对应的章节获取更多信息。

兼容性

支持Android 2.1 及以上系统。

申请密钥

简介

在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥该密钥与您的百度账户相关联。因此,您必须先有百度帐户,才能获得开发密钥。并且,该密钥与您创建的过程名称有关,具体流程请参考如下介绍。

Key的申请地址为:http://lbsyun.baidu.com/apiconsole/key

注意

  1. 每个Key唯一对应一个APP,如果您的APP修改了包名或者发布的时候打包的签名文件改变了,则改变前后的APP被视为两个APP。因此,多个APP【包括一份代码多个包名打包】需申请多个与之对应的Key;
  2. 在同一个工程中同时使用百度地图SDK、定位SDK、导航SDK 和全景SDK的全部或者任何组合,可以共用同一个key
  3. 如果您在Android SDK开发过程中使用了LBS云服务(如LBS云检索功能),则需要为该服务单独申请一个“服务端”类型的key,代码中调用LBS云服务接口时使用此key即可,注意:此key一定要和AndroidManifest.xml中配置API_KEY的key区分开;
  4. Android SDK自v2.1.3版本开始采用了全新的Key验证体系,v2.1.3之前的版本不再维护,如果升级到新版本SDK(v2.1.3及之后的版本)时需要在API控制台重新申请key进行替换。

申请步骤

  1. 登录百度账号

访问API控制台页面,若您未登录百度账号,将会进入百度账号登录页面,如下图:

  1. 登陆API控制台

登录会跳转到API控制台服务,具体如下图:

  1. 创建应用

点击”创建应用”,进入创建AK页面,输入应用名称,将应用类型改为:“Android SDK”:


  1. 配置应用

在应用类型选为“Android SDK”后,需要配置应用的安全码,如下图所示:

  1. 获取安全码

安全码的组成规则为:Android签名证书的sha1值+packagename , 例如:

SHA1:BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75
包名:com.baidumap.demo

Android应用获取包名packagename,AS工程获取位置:

包名需要在文件build.gradle中查询 applicationId,并确保 applicationId 与在 AndroidManifest.xml 中定义的包名一致

在文件build.gradle中查询 applicationId,方法如图:

Android签名证书的sha1值获取方式有两种:

  • 第一种方法:使用keytool

    • 第1步:运行进入控制台

    • 第2步:定位到.android文件夹下,输入cd .android

    • 第3步:输入keytool -list -v -keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(密钥口令是android),例如:其中keytool为jdk自带工具;keystorefile为Android 签名证书文件

  • 第二种方法:在AS中,点击下图signingReport运行Task,即可。


其中“SHA1”值即为Android签名证书的sha1值

  1. 成功创建KEY

在输入安全码后,点击“确定”完成应用的配置工作,您将会得到一个创建的Key,请妥善保管您所申请的Key。到这您就可以使用新Key来完成您的开发工作了。

配置环境及发布

开发工具

Android开发工具很多,主要是Eclipse和Android Studio两种开发工具。下面将主要针对Android Studio介绍一下地图SDK的工程配置方法。Eclipse的工程配置方法参照官方文档

Android Studio工程配置方法

第一步:在工程app/libs目录下放入baidumapapi_vX_X_X.jar包,在src/main/目录下新建jniLibs目录,工程会自动加载src目录下的so动态库,放入libBaiduMapSDK_vX_X_X_X.so如下图所示,注意jar和so的前3位版本号必须一致,并且保证使用一次下载的文件夹中的两个文件,不能不同功能组件的jar或so交叉使用。

第二步:工程配置还需要把jar包集成到自己的工程中,如图上图所示,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。对应在build.gradle生成工程所依赖的jar文件说明,如图所示:

app模块下的build.gradle文件如下图:

应用混淆

集成地图SDK的应用,在打包混淆的时候,需要注意与地图SDK相关的方法不可被混淆。混淆方法如下:

-keep class com.baidu.** {*;}
-keep class vi.com.** {*;}    
-dontwarn com.baidu.**

保证百度类不能被混淆,否则会出现网络不可用等运行时异常

Hello BaiduMap

显示百度地图

百度地图SDK为开发者提供了便捷的显示百度地图数据的接口,通过以下几步操作,即可在您的应用中使用百度地图数据:

  • 创建并配置工程(具体方法参见上部分内容);
  • 在AndroidManifest中添加开发密钥、所需权限等信息;

    • 在application中添加开发密钥


      \
  • 添加所需权限

    \
    \
    \
    \
    \
    \
    \
    \
    \

  • 在布局xml文件中添加地图控件

    \<com.baidu.mapapi.map.MapView

    android:id="@+id/bmapView"  
    android:layout\_width="match\_parent"  
    android:layout\_height="match\_parent"  
    android:clickable="true" /\>
    
  • 在应用程序创建时初始化 SDK引用的Context 全局变量

    public class MainActivity extends Activity {

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity\_main);  
    }  
    

    }

注意:在SDK各功能组件使用之前都需要调用SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中

  • 创建地图Activity,管理地图生命周期

    public class MainActivity extends Activity {

    MapView mMapView = null;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext  
        //注意该方法要再setContentView方法之前实现  
        SDKInitializer.initialize(getApplicationContext());  
        setContentView(R.layout.activity\_main);  
        //获取地图控件引用  
        mMapView = (MapView) findViewById(R.id.bmapView);  
    }  
    @Override  
    protected void onDestroy() {  
        super.onDestroy();  
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理  
        mMapView.onDestroy();  
    }  
    @Override  
    protected void onResume() {  
        super.onResume();  
        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理  
        mMapView.onResume();  
        }  
    @Override  
    protected void onPause() {  
        super.onPause();  
        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理  
        mMapView.onPause();  
        }  
    }
    

完成以上步骤后,运行程序,即可在您的应用中显示如下地图:

以上的例子为大家介绍了如何构建一个基础的地图页面。地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。具体使用方法请参考MutiMapViewDemo中的相关介绍。

此外,自v2.3.5版本开始。MapView控件还增加了对Fragment框架的支持。用户可以使用SupportMapFragment控件完成相应框架内的开发工作(详见MapFragmentDemo)。

基础地图

简介

开发者可利用SDK提供的接口,使用百度为您提供的基础地图数据。目前百度地图SDK所提供的地图等级为3-21级,所包含的信息有建筑物、道路、河流、学校、公园等内容

V3.7.0起,地图支持缩放至21级,暂不支持卫星图、热力图、交通路况图层的21级显示,打开以上类型图层,地图会自动缩放到20级。

所有叠加或覆盖到地图的内容,我们统称为地图覆盖物。如标注、矢量图形元素(包括:折线、多边形和圆等)、定位图标等。覆盖物拥有自己的地理坐标,当您拖动或缩放地图时,它们会相应的移动。

百度地图SDK为广大开发者提供的基础地图和上面的各种覆盖物元素,具有一定的层级压盖关系,具体如下(从下至上的顺序):

  • 1、基础底图(包括底图、底图道路、卫星图、室内图等);
  • 2、瓦片图层(TileOverlay);
  • 3、地形图图层(GroundOverlay);
  • 4、热力图图层(HeatMap);
  • 5、实时路况图图层(BaiduMap.setTrafficEnabled(true););
  • 6、百度城市热力图(BaiduMap.setBaiduHeatMapEnabled(true););
  • 7、底图标注(指的是底图上面自带的那些POI元素);
  • 8、几何图形图层(点、折线、弧线、圆、多边形);
  • 9、标注图层(Marker),文字绘制图层(Text);
  • 10、指南针图层(当地图发生旋转和视角变化时,默认出现在左上角的指南针);
  • 11、定位图层(BaiduMap.setMyLocationEnabled(true););
  • 12、弹出窗图层(InfoWindow);
  • 13、自定义View(MapView.addView(View););

地图类型

百度地图Android SDK为您提供了3种类型的地图资源普通矢量地图、卫星图和空白地图),开发者可以利用BaiduMap中的mapType()方法来设置地图类型。核心代码如下:

mMapView = (MapView) findViewById(R.id.bmapView);  
mBaiduMap = mMapView.getMap();  

//普通地图  
mBaiduMap.setMapType(BaiduMap.MAP\_TYPE\_NORMAL);  

//卫星地图  
mBaiduMap.setMapType(BaiduMap.MAP\_TYPE\_SATELLITE);  

//空白地图, 基础地图瓦片将不会被渲染。在地图类型中设置为NONE,将不会使用流量下载基础地图瓦片图层。使用场景:与瓦片图层一起使用,节省流量,提升自定义瓦片图下载速度。
mBaiduMap.setMapType(BaiduMap.MAP\_TYPE\_NONE);

实时交通图

当前,全国范围内已支持多个城市实时路况查询,且会陆续开通其他城市。在地图上打开实时路况的核心代码如下:

mMapView = (MapView) findViewById(R.id.bmapView);  
mBaiduMap = mMapView.getMap();  
//开启交通图   
mBaiduMap.setTrafficEnabled(true);

百度城市热力图

百度地图SDK继为广大开发者开放热力图本地绘制能力之后,再次进一步开放百度自有数据的城市热力图层,帮助开发者构建形式更加多样的移动端应用。

百度城市热力图的性质及使用与实时交通图类似,只需要简单的接口调用,即可在地图上展现样式丰富的百度城市热力图。

在地图上开启百度城市热力图的核心代码如下:

mMapView = (MapView) findViewById(R.id.bmapView);  
mBaiduMap = mMapView.getMap();  
//开启交通图   
mBaiduMap.setBaiduHeatMapEnabled(true);

地图控制和手势

  • 地图控制

    • 地图Logo

      默认在左下角显示,不可以移除。
      通过mMapView.setLogoPosition(LogoPosition.logoPostionleftBottom)方法,使用枚举类型控制显示的位置,共支持6个显示位置(左下,中下,右下,左上,中上,右上)。
      地图Logo不允许遮挡,可通过mBaiduMap.setPadding(paddingLeft, paddingTop, paddingRight, paddingBottom)方法可以设置地图边界区域,来避免UI遮挡。
      其中参数paddingLeft、paddingTop、paddingRight、paddingBottom参数表示距离屏幕边框的左、上、右、下边距的距离,单位为屏幕坐标的像素密度。

  • 指南针

    指南针默认为开启状态,可以关闭显示 。

  • 比例尺

    比例尺默认为开启状态,可以关闭显示。同时支持设置MaxZoomLevel和MinZoomLevel,可通过mMapView.getMapLevel获取当前地图级别下比例尺所表示的距离大小。

  • 地图手势

    • 地图平移

      控制是否启用或禁用平移的功能,默认开启。如果启用,则用户可以平移地图

  • 地图缩放

    控制是否启用或禁用缩放手势,默认开启。如果启用,用户可以双指点击或缩放地图视图。

  • 地图俯视(3D)

    控制是否启用或禁用俯视(3D)功能,默认开启。如果启用,则用户可使用双指 向下或向上滑动到俯视图。

  • 地图旋转

    控制是否启用或禁用地图旋转功能,默认开启。如果启用,则用户可使用双指 旋转来旋转地图。

  • 禁止所有手势

    控制是否一并禁止所有手势,默认关闭。如果启用,所有手势都将被禁用。

  • 标注覆盖物

    • 地图标注

      开发者可根据自己实际的业务需求,利用标注覆盖物,在地图指定的位置上添加标注信息。具体实现方法如下:

      //定义Maker坐标点
      LatLng point = new LatLng(39.963175, 116.400244);
      //构建Marker图标
      BitmapDescriptor bitmap = BitmapDescriptorFactory
      .fromResource(R.drawable.icon_marka);
      //构建MarkerOption,用于在地图上添加Marker
      OverlayOptions option = new MarkerOptions()
      .position(point)
      .icon(bitmap);
      //在地图上添加Marker,并显示
      mBaiduMap.addOverlay(option);

针对已经添加在地图上的标注,可采用如下方式进行手势拖拽:

QinPeng Zhu wechat
扫一扫,关注我的公众号获取更多资讯!
学习分享,感谢鼓励!